package dao.fachada;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import models.Produto;
import models.Tag;
import models.Usuario;

import dao.ConexaoBanco;
import dao.FachadaDAO;
import dao.ProdutoDAO;
import dao.UsuarioDAO;

public class FachadaUsuarioDAO {
	
	private static FachadaUsuarioDAO singleton = null;
	
	private java.sql.Connection conexao;
	private ConexaoBanco conexaoBanco;
	
	public static FachadaUsuarioDAO getInstance() {
        if (singleton == null) {
	        // "lazy instantiation"
	        singleton = new FachadaUsuarioDAO();
        }
        return singleton;
    }
	
	private Connection openConexaoBanco(){
		this.conexaoBanco = new ConexaoBanco();		
		this.conexao = this.conexaoBanco.openConexao();
	
		return this.conexao;
	}
	
	public Usuario buscarUsuarioPorId(String id){
		this.openConexaoBanco();
		
		Usuario usuario = new Usuario();
		
		usuario.setId(Integer.parseInt(id));
		
		try {
			String comando = "select * from usuario where id='"+id+"';";
			java.sql.Statement start = conexao.createStatement();
			ResultSet rs = start.executeQuery(comando);
			
			if(rs.first()){
				usuario.setNome(rs.getString("nome"));
				usuario.setEndereco(rs.getString("endereco"));
				usuario.setLogin(rs.getString("login"));
				usuario.setNome(rs.getString("nome"));
				usuario.setSenha(rs.getString("senha"));
				usuario.setTelefone(rs.getString("telefone"));
			}
		} catch (Exception e) {

		}
		return usuario;
	}
	
	public void alterar(Usuario usuario) throws SQLException{
		this.openConexaoBanco();
		
		String comandoAlterar = "UPDATE usuario SET  nome = ?, " +
		"endereco = ?, " +
		"email = ?, " + 
		"telefone = ?, " +
		"login = ?, " +
		"senha = ? " + " WHERE usuario.id = ?;";
	
		PreparedStatement p = this.conexao.prepareStatement(comandoAlterar);
		
		System.out.println("TESTE");
		System.out.println(usuario.getEmail());
		
		p.setString(1, usuario.getNome());
		p.setString(2, usuario.getEndereco());
		p.setString(3, usuario.getEmail());
		p.setString(4, usuario.getTelefone());
		p.setString(5, usuario.getLogin());
		p.setString(6, usuario.getSenha());
		p.setInt(7, usuario.getId());
		
		p.execute();
		
		return;
	}

	public void inserirProdutoCarrinho(int usuario_id, int produto_id, int quantidade) {
		UsuarioDAO usuarioDAO = new UsuarioDAO(this.openConexaoBanco());
		
		usuarioDAO.inserirProdutoCarrinho(usuario_id, produto_id, quantidade);
		
	}

	public List<Produto> listarProdutosCarrinhoUsuario(int id) {
		ProdutoDAO produtoDAO = new ProdutoDAO(this.openConexaoBanco());
		return produtoDAO.listarProdutosCarrinhoUsuario(id);
	}

	public void excluirProdutoCarrinhoUsuario(String id_usuario, String id_produto) {
		ProdutoDAO produtoDAO = new ProdutoDAO(this.openConexaoBanco());
		produtoDAO.excluirProdutoCarrinhoUsuario(id_usuario, id_produto);
	}

}
